Cardioid Linkage

Move generator point G

Locus

Wheel

A = Point(a)
B = Point(a)
c = Circle(A, B)
C, D = Intersect(c, a)
b = Segment(A, D)
G = Point(c)
A' = Mirror(A, G)
F = Midpoint(D, A')
A'_1 = Mirror(A, F)
d = Segment(D, A'_1)
e = Segment(A'_1, A')
f = Segment(A', A)
G_1 = Midpoint(G, A')
g = LineBisector(G_1, A'_1)
A'' = Mirror(A', g)
h = Segment(A'_1, A'')
i = Segment(A'', G_1)
H = Midpoint(A'', G_1)
I = Midpoint(H, G_1)
j = LineBisector(I, A')
G' = Mirror(G_1, j)
k = Segment(I, G')
l = Segment(G', A')
A''_1 = Mirror(A', G')
A''_2 = Mirror(A', A''_1)
m = Segment(G', A''_2)
loc1 = Locus(A''_2, G)
n = false
p = Circle(A', A''_2)
o = false